<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // function fn( cb ){
  //   let a = 10;
  //   setTimeout(()=>{
  //     a = 20;
  //     cb( a );
  //   }, 1000);
  // }
  // fn( function(res){ console.log(res); } );

  // 回调函数：将一个函数A作为参数传入另一个函数B中，函数A是函数B的回调函数

  // 回调函数的作用：可以获取异步数据

  // 一个异步，一个回调函数

  // 需求：

  // 多个异步：异步1，异步2，异步3
  // 多个异步：刷牙，吃饭，学习

  // 我需要拿到异步3的数据（学习）
  // 异步3的程序中需要使用异步2的数据（学习之前先吃饭）
  // 异步2的程序中需要使用异步1的数据（吃饭之前先刷牙）

  // fn("这是异步1", function(res1){
  //   // 刷牙完成
  //   fn("这是异步2" + res1, function(res2){
  //     // 吃饭完成
  //     fn("这是异步3" + res2, function(res3){
  //       // 学习
  //       console.log(res3);
  //     });
  //   });
  // });




  // 回调地狱：异步程序的回调函数嵌套
  // fn("这是异步1", function(res1){
  //   fn("这是异步2" + res1, function(res2){
  //     fn("这是异步3" + res2, function(res3){
  //       // ...
  //     });
  //     // ...
  //   });
  //   // ...
  // });
  // 浪费性能
  // 不方便调错
  // 可读性差





  





  
</script>
</html>